home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / gawk / gawk213b.zoo / test / sub_gen.awk < prev    next >
Text File  |  1991-04-20  |  1KB  |  60 lines

  1. #
  2. # input lines are of form
  3. #    pattern  replacement  input-string  sub-output  gsub-output
  4. #
  5. BEGIN {
  6.     FS = "\t"
  7.     awk = "gawk"
  8.     ifile = "inp.tmp"
  9.     aprog = "tmp.awk"
  10.     cmd = sprintf("%s -f %s %s", awk, aprog, ifile)
  11.     print "T.sub: tests of sub and gsub code"
  12. }
  13. NF == 0        { next }
  14. $1 == "#"    { next }
  15.  
  16. $1 != "" {    # new pattern
  17.     pat = $1
  18. }
  19. $2 != "" {    # new replacement
  20.     repl = $2
  21. }
  22. $3 != "" {    # new input string
  23.     str = $3
  24. }
  25. $4 != "" {    # new sub output
  26.     subout = $4
  27. }
  28. $5 != "" {    # new gsub output
  29.     gsubout = $5
  30. }
  31. NF < 5 {    # weird input line
  32.     printf("weird test spec `%s` ignored\n", $0) | "cat 1>&2"
  33.     next
  34. }
  35. {        # "" => explicitly empty
  36.     printf(" %3d:   %s %s %s %s %s:\n", NR, pat, repl, str, subout, gsubout)
  37.     if (pat == "\"\"") pat = ""
  38.     if (repl == "\"\"") repl = ""
  39.     if (str == "\"\"") str = ""
  40.     if (subout == "\"\"") subout = ""
  41.     if (gsubout == "\"\"") gsubout = ""
  42. }
  43. {        # generate a test
  44.     print str > ifile
  45.     test = \
  46.       sprintf("{ temp = $0; sub(/%s/, \"%s\", temp)\n", pat, repl) \
  47.       sprintf("  if (temp !~ /^%s$/) print \" sub %d fails:\", temp, \"should be %s\"\n",
  48.         subout, NR, subout) \
  49.       sprintf("  gsub(/%s/, \"%s\")\n", pat, repl) \
  50.       sprintf("  if ($0 !~ /^%s$/) print \"gsub %d fails:\", $0, \"should be %s\"\n}",
  51.         gsubout, NR, gsubout) \
  52.       "" ""
  53.     print test > aprog
  54.     close (ifile)
  55.     close (aprog)
  56. #    print "test is: "
  57. #    system ("cat " aprog)
  58.     system(cmd)
  59. }
  60.